package com.tron.dobest.java.troncollection;

import java.util.*;

public class Start {
    public static void main(String[] args) {


        /**
         * 动态数组
         */
        ArrayList<String> arrayList = new ArrayList<>();


        /**
         * 链表
         * LinkedList implements interface Deque<E> extends Queue<E>
         * 可以用作：队列，栈，双端队列
         */
        LinkedList<String> linkedList = new LinkedList<>();
        //查看头部
        linkedList.element();   //NoSuchElementException
        linkedList.peek();      //null
        //尾部添加元素
        linkedList.add("");        //IllegalStateException
        linkedList.offer("");   //false
        //头部取出元素
        linkedList.remove();    //NoSuchElementException
        linkedList.poll();      //null

        //头部添加
        linkedList.push("");    ////IllegalStateException
        //头部取出
        linkedList.pop();    //NoSuchElementException

        linkedList.addFirst("");
        linkedList.addLast("");
        linkedList.removeFirst();
        linkedList.removeLast();

        linkedList.remove("");


        /**
         * 没有下标的双端队列，双端操作性能优于LinkedList
         */
        ArrayDeque<String> arrayDeque = new ArrayDeque<>();
        arrayDeque.addFirst("");
        arrayDeque.addLast("");
        arrayDeque.removeFirst();
        arrayDeque.removeLast();
        arrayDeque.remove("");


        /**
         * 无序高效查找数据类型
         */
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("", "");
        hashMap.get("");
        hashMap.remove("");
        hashMap.forEach((k,v)->{
            System.out.println(k);
        });
        hashMap.isEmpty();
        hashMap.containsKey("");
        hashMap.containsValue("");
        hashMap.clear();

        //java 8
        hashMap.putIfAbsent("", "");                        //如果没key就加入,成功返回null
        hashMap.getOrDefault("", "");      //获取一个值，没有就返回默认值
        hashMap.computeIfAbsent("", v -> "");          //存在k时返回v，不存在k时添加k，v
        hashMap.computeIfPresent("", (k,v)->"");       //存在时处理kv，替换值，不存在时返回null
        hashMap.merge("", "新值", (o, n) -> ""); //k不存在，直接添加新值。k存在可以处理旧值和新值



        /**
         * 无序，没有重复元素，内部用hashMap实现，对象的去重需要重写hashCode和equals方法。lombok @data注解会自动重写(没有需要手动添加)。
         *
         */
        HashSet<String> hashSet = new HashSet<>();
        hashSet.add("");
        hashSet.remove("");
        hashSet.iterator();
        hashSet.isEmpty();
        hashSet.contains("");
        hashSet.containsAll(Arrays.asList(""));
        hashSet.addAll(Arrays.asList(""));      //不重复添加，有变化返回true
        hashSet.retainAll(Arrays.asList(""));   //检查本集合是否完全包含给定集合，并把多余的元素删除


        /**
         * 有序红黑树
         */
        final TreeMap<String, Object> treeMap = new TreeMap<>();
        final TreeMap<String, Object> treeMap1 = new TreeMap<>(String::compareTo);   //传入key的比较器
        final TreeMap<String, Object> treeMap2 = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);  //传入key的比较器

        /**
         * 有序去重红黑树，内部实现treeMap
         */
        final TreeSet<Object> treeSet = new TreeSet<>();

    }


}
